package com.link.base.base.report.dao.mybatis.mapper;

import com.link.base.base.order.model.SaleOrder;
import com.link.base.base.coupons.model.CollectRecord;
import com.link.base.base.report.model.*;
import com.link.base.base.report.model.*;
import com.link.base.base.saleactivity.model.AccntCampMonitor;
import com.link.base.base.saleactivity.model.RaffleDetail;
import com.link.base.base.saleactivity.model.SaleActivity;
import com.link.base.base.salestarget.model.SalesTarget;

import java.util.List;

/**
 * 报表数据查询
 * @author  lujiang
 */
public interface AccntReportMapper {
    /**
     * 查询特定时间里的不同来源客户数量
     * @param account
     * @return List PortalBaseDataReport
     * @throws Exception
     */
    List<PortalBaseDataReport> queryAccountEverydayCount(PortalBaseDataReport account) throws Exception;

    /**
     * 查询特定门店的特定时间内的销售目标
     * @param salesTarget
     * @return
     */
    List<SalesTarget> querySalesTarget(SalesTarget salesTarget);

    /**
     * 查询特定时间内的订单总量
     * @param salesTarget
     * @return
     */
    List<SaleOrder> querySaleOrders(SalesTarget salesTarget);

    /**
     * 查询每天的订单金额总数
     * @param order
     * @return
     */
    List<SaleOrder> queryorderTotalAmountForDay(SaleOrder order);

    /**
     * 查询选定时间段内的订单，按产品名称，和订单金额显示
     * @param order
     * @return
     */
    List<SaleOrder> querySaleOrderPro(SaleOrder order);

    /**
     * 查询选定时间段内的订单，按产品品牌，和订单金额显示
     * @param order
     * @return
     */
    List<SaleOrder> querySaleOrderProduct(SaleOrder order);

    /**
     * 查询选定时间段内的产品出入库数量
     * @param order
     * @return
     */
    List<StockChangeReport> queryProdStockChangeReport(SaleOrder order);

    /**
     * 根据活动id 查询活动中奖人数和中奖次数
     * @param detail
     * @return
     */
    List<RaffleDetail> activetyReport(RaffleDetail detail);

    /**
     * 根据活动id 查询活动奖品领取人数和领取次数
     * @param collectRecord
     * @return
     */
    List<CollectRecord> queryCollectRecord(CollectRecord collectRecord);

    /**
     * 查询活动的中奖（未中奖）人数和时间
     * @param detail
     * @return
     */
    List<RaffleDetail> queryCoupon(RaffleDetail detail);

    /**
     * 查询活动的中奖（未中奖）次数和时间
     * @param detail
     * @return
     */
    List<RaffleDetail> queryCoupontwo(RaffleDetail detail);

    /**
     * 查询兑奖人数和人
     * @param collectRecord
     * @return
     */
    List<CollectRecord> querycollectRecordsForDay(CollectRecord collectRecord);

    /**
     * 查询兑奖次数和时间
     * @param collectRecord
     * @return
     */
    List<CollectRecord> querycollectRecordsForDaynum(CollectRecord collectRecord);

    /**
     * 查询所选时间段内当前登陆用户对应的订单数量以及订单金额
     * @param order
     * @return
     */
    SaleOrder querySaleOrderSum(SaleOrder order);

    /**
     * 查询所选时间段内活动总数
     * @param activity
     * @return
     */
    SaleActivity activitycount(SaleActivity activity);

    /**
     * 查询所选时间段内某活动下优惠券参与人数
     * @param collectRecord
     * @return
     */
    List<CollectRecord> queryCouponscount(CollectRecord collectRecord);

    /**
     * 查询所选时间段内某活动下优惠券使用人数
     * @param collectRecord
     * @return
     */
    List<CollectRecord> queryCouponsUsecount(CollectRecord collectRecord);

    /**
     * 查询所选时间段内某活动下优惠券领取人数和时间
     * @param collectRecord
     * @return
     */
    List<CollectRecord>  couponsNumberOfPeople(CollectRecord collectRecord);

    /**
     * 查询所选时间段内某活动下优惠券使用人数和时间
     * @param collectRecord
     * @return
     */
    List<CollectRecord> couponsNumberOfPeople1(CollectRecord collectRecord);

    /**
     * 查询所选时间段内某活动下优惠券使用次数和时间
     * @param collectRecord
     * @return
     */
    List<CollectRecord> couponsNumberOfNumber1(CollectRecord collectRecord);

    /**
     * 查询所选时间段内某活动下优惠券领取次数和时间
     * @param collectRecord
     * @return
     */
    List<CollectRecord> couponsNumberOfNumber(CollectRecord collectRecord);

    /**
     * 查询销售目标
     * @param salesTarget
     * @return list
     * @throws Exception
     */
    public List<SalesTarget> querySalesTargetByShopper(SalesTarget salesTarget) throws Exception;

    /**
     * 查询订单
     * @param salesTarget
     * @return list
     * @throws Exception
     */
    public List<SaleOrder> querySaleOrdersByShopper(SalesTarget salesTarget) throws Exception;

    /**
     * 查询目标达成量 - 目标
     *
     * @author NingLanhao
     * @date 2018-12-26 20:23
     * @param goalAchievement
     * @return java.lang.Integer
     * @throws Exception
     */
    Double queryGoal(GoalAchievement goalAchievement) throws Exception;

    /**
     * 查询目标达成量 - 达成
     *
     * @author NingLanhao
     * @date 2018-12-25 17:47
     * @param goalAchievement
     * @return java.lang.Integer
     * @throws Exception
     */
    Double queryAchieve(GoalAchievement goalAchievement) throws Exception;

    /**
     * 查询客户分析报表汇总数据不带月份选择
     * @param acctAnys
     * @return acctAyns
     * @throws Exception
     */
    public List<AcctAnys> queryAcctAnysReport(AcctAnys acctAnys) throws Exception;

    /**
     * 查询客户分析报表详情不带月份选择
     * @param acctAnys
     * @return list
     * @throws Exception
     */
    public List<AcctAnys> queryByAcctAnysNoMonthDetail(AcctAnys acctAnys) throws Exception;

    /**
     * 查询客户月度销售达成分析报表汇总数据
     * @param acctAnys
     * @return acctAyns
     * @throws Exception
     */
    public List<AcctAnys> queryMonthTargetSale(AcctAnys acctAnys) throws Exception;

    /**
     * 查询客户月度销售达成分析报表详情数据，某省份在某月期间内各客户销售达成情况
     * @param acctAnys
     * @return list
     * @throws Exception
     */
    List<AcctAnys> queryMonthTargetSaleDetail(AcctAnys acctAnys) throws Exception;


    /**
     * 查询客户推荐数量
     * @param record
     * @return
     * @throws Exception
     */
    List<AcctCampReport> queryAccntCount(AccntCampMonitor record) throws Exception;
}
